package java6681.more;

import java.util.Deque;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Queue;

public class MoreLinkedList6681 {

  static LinkedList<String> books = new LinkedList<String>();

  public static void main(String[] args) {
    // 向队列中添加元素
    testAddXXX();
    System.out.println("foreach遍历：");
    // 使用foreach循环遍历
    for (String str : books) {
      System.out.print(str + "  ");
    }
    System.out.println("");
    System.out.println("------------------");
    System.out.println("按索引访问遍历：");
    // 以List的方式（按索引访问的方式）来遍历集合元素
    for (int i = 0; i < books.size(); i++) {
      System.out.print(books.get(i) + "  ");
    }
    System.out.println("");
    System.out.println("------------------");

    // 从队列中取元素
    testRemoveXXX();
    System.out.println("------------------");

    System.out.println("删除后剩下的数据：");
    // 获取LinkedList的迭代器
    Iterator<String> iterator = books.iterator();
    // 使用迭代器遍历
    while (iterator.hasNext()) {
      System.out.println(iterator.next() + "  ");
    }
  }

  private static void testAddXXX() {
    // Queue向队列添加元素的方法
    Queue<String> queue = books;
    // 在队尾添加元素
    queue.offer("offer");

    // Deque双向队列添加元素的方法
    Deque<String> deque = books;
    // 在队头添加元素
    deque.push("push");
    // 在队头添加元素
    deque.offerFirst("offerFirst");
    // 在队尾添加元素
    deque.offerLast("offerLast");
  }

  private static void testRemoveXXX() {
    System.out.println("Queue:单向队列，先进先出（FIFO）");
    Queue<String> queue = books;
    // 访问并不删除元素
    System.out.println("element：" + queue.element());
    System.out.println("peek：" + queue.element());
    // 从队列中取元素(删除)
    System.out.println("poll：" + queue.poll());

    // 双向队列
    System.out.println("Deque:双向队列");
    Deque<String> deque = books;
    // 访问并不删除元素
    System.out.println("peekFirst：" + deque.peekFirst());
    System.out.println("peekLast：" + books.peekLast());
    // 从队列中取元素(删除)
    System.out.println("pop：" + books.pop());
    System.out.println("pollLast：" + books.pollLast());
  }
}
